1 Wprowadzenie

Wielkość śledzia oceanicznego (Clupea harengus) uległa zmniejszeniu. Przez ostatnie 60 lat zmierzono długość ponad 50 tysięcy złowionych śledzi oraz zarejestrowano parametry ich naturalnego ekosystemu w momencie połowu. Poniższy, interaktywny wykres prezentuje zmiany wielkości śledzi w czasie.

Ten raport pokazuje, że temperatura powierzchni oceanu jest czynnikiem najbardziej, spośród dostępnych, skorelowanym z rozmiarem śledzia. Jest to korelacja negatywna, to znaczy, że przy rosnącej temperaturze długość śledzi maleje, a przy spadku temperatury następuje wzrost wielkości tych ryb.

Śledź oceaniczny (Clupea harengus), Źródło: Wikimedia

Śledź oceaniczny (Clupea harengus), Źródło: Wikimedia

Wniosek ten został wyciągnięty po analizie dostępnego zbioru danych. Aż 20% rekordów z tego zbioru wymagało uzupełnienia brakujących danych. Aby zmniejszyć złożoność problemu, trzy atrybuty zostały usunięte ze względu na wysoką korelację z innymi parametrami.

2 Ustawienia

Sys.setlocale("LC_CTYPE","pl_PL")
set.seed(92)
library(ggplot2)
library(plotly)
library(knitr)
library(VIM)
library(lattice)
library(mice)
library(reshape2)
library(caret)

3 Wstępne przetwarzanie danych

3.1 Wczytywanie danych

herrings <-read.csv("sledzie.csv", na.strings = "?")

3.2 Brakujące wartości

Zbiór danych posiada 16 atrybutów. Na żadnym z nich nie brakuje więcej niż 5% wartości. Oznacza to, że żaden z atrybutów nie musi zostać odrzucony ani nie wymaga ponownych pomiarów.

X length cfin1 cfin2 chel1 chel2 lcop1 lcop2 fbar recr cumf totaln sst sal xmonth nao
0 % 0 % 3.01 % 2.92 % 2.96 % 2.96 % 3.14 % 3.03 % 0 % 0 % 0 % 0 % 3.01 % 0 % 0 % 0 %

Poniższy wykres pokazuje częstość występowania obserwacji o określonej kombinacji brakujących wartości. Pola puste występują na siedmiu atrybutach. Prawie 80% zbioru stanowią kompletne wiersze. Następnie, najliczniejszą grupą są rekordy w których brakuje tylko jednej wartości. Przypadki gdy w danym wierszu brakuje dwóch lub trzech wartości stanowią zdecydowaną mniejszość.

Brakujące wartości są uzupełniane techniką Multivariate Imputation by Chained Equations przy użyciu pakietu MICE.

imputedHerrings <- mice(herrings, m=1, method = "mean", seed= 29, print=FALSE)

Poniżej zaprezentowo wykresy gęstości wartości zmiennych. Oryginalne pomiary zilustrowano kolorem niebieskim; rozkład gęstości uzupełnionych danych przedstawiono na czerwono. Okazuje się, że w większości przypadków brakujące wartości pochodziły z wąskiego zakresu wartości oryginalnych pomiarów. Jest to przesłanka za tym, że wartości puste nie były przypadkowe i zaszły tylko w określonych warunkach połowu.

Następnie utworzona zostaje nowa kolekcja danych, uzupełniona o brakujące wartości.

completeHerrings <- complete(imputedHerrings, 1)

3.3 Korelacje pomiędzy atrybutami

Istnieje niezerowe prawdopodobieństwo, że pomiędzy dostępnymi atrybutami istnieje korelacja. To znaczy obecność jednego atrybutu nie wnosi nowych informacji w obecności innego atrybutu. Taka nadmiarowość jest niepożądana z perspektywy planowanej regresji. Aby to sprawdzić stworzono macierz korelacji Pearsona pomiedzy każdą parą atrybutów.

Analiza macierzy pozwala usunąć trzy atrybuty: chel1 (silna korelacja z lcop1), chel2 (powiązanie z lcop2) oraz fbar (związek z cumf).

completeHerrings <- subset(completeHerrings, select = -c(chel1,chel2, fbar))

3.4 Nazwy atrybutĂłw

Ostatnim etapem jest nadanie nowych, czytelnych nazw kolumnom.

colnames(completeHerrings) <- c("Połów", 
                                "Długość", 
                                "Calanus finmarchicus gatunek 1", 
                                "Calanus finmarchicus gatunek 2", 
                                "Widłonogi gatunek 1",
                                "Widłonogi gatunek 2",
                                "Złowione śledzie w skali roku",
                                "Żywy narybek w skali roku",
                                "Złowione śledzie w czasie połowu", 
                                "Temperatura powierzchni oceanu [°C]", 
                                "Zasolenie wody [‰]", 
                                "MiesiÄ…c", 
                                "NAO")

4 ZbiĂłr danych

Ostatecznie, zbiór danych zawiera 52582 obserwacje oraz 13 zmiennych. Rozkład wartości tych zmiennych prezentują poniższe wykresy.

5 Regresja

Celem regresji w tym raporcie jest stworzenie modelu środowiska, który będzie przewidywał długość złowionych śledzi. W pierwszym kroku, ze zbioru danych eliminowany jest atrybut określający chronologię, a następnie zbiór jest dzielony na część treningową i testową.

5.1 ZbiĂłr treningowy i testowy

regressionHerrings <- subset(completeHerrings, select = -Połów)
inTraining <- createDataPartition(y = regressionHerrings$Długość, 
                                  p = .70, 
                                  list = FALSE)
trainingHerrings <- regressionHerrings[inTraining, ]
testingHerrings <- regressionHerrings[-inTraining, ]

5.2 Konfiguracja

Proces uczenia odbywa się w ramach walidacji krzyżowej, w której zbiór treningowy dzielony jest na cztery części. Następnie określane są parametry wymagające strojenia.

ctrl <- trainControl(method = "cv", number = 4)
paramsGrid <- expand.grid(n.trees=c(200, 300, 400), 
                          interaction.depth = 5:10, 
                          shrinkage=c(0.1, 0.2, 0.5), 
                          n.minobsinnode=c(5))

5.3 Uczenie

Regresor tworzony jest algorytmem Stochastic Gradient Boosting.

fit <- train(Długość ~ .,
             data = trainingHerrings,
             method = "gbm",
             trControl = ctrl,
             tuneGrid=paramsGrid)

5.4 Jakość predykcji

Na zbiorze testowym algorytm osiąga miarę R² równą 0.52 oraz RMSE na poziomie 1.16 cm. Wyniki te pochodzą z dostrojenia parametrów do poniższych wartości:

n.trees interaction.depth shrinkage n.minobsinnode
18 400 10 0.1 5

5.5 Kluczowe atrybuty

Ostatnim etapem analizy jest identyfikacja tych atrybutów, które mają największe znaczenie przy przewidywaniu długości śledzia. Poniższa lista prezentuje wszystkie atrybuty wraz ze znormalizowaną miarą ich znaczenia. Zdecydowanym liderem jest tutaj temperatura na powierzchni oceanu.

## gbm variable importance
## 
##                                        Overall
## `Temperatura powierzchni oceanu [°C]` 100.0000
## `Złowione śledzie w skali roku`        28.8488
## `Widłonogi gatunek 1`                  13.9047
## `Złowione śledzie w czasie połowu`     12.7210
## MiesiÄ…c                                10.3952
## `Widłonogi gatunek 2`                   3.6638
## `Calanus finmarchicus gatunek 2`        3.5776
## `Calanus finmarchicus gatunek 1`        2.4823
## `Żywy narybek w skali roku`             2.0326
## NAO                                     0.9792
## `Zasolenie wody [‰]`                    0.0000

Wykres poniżej prezentuje jak bardzo zmiany w długości śledzi są skorelowane w czasie ze zmianami temperatury wody.